/**
 * @file    pc_pace.h
 * @brief   沛城最新上位机通讯协议
 * @author  liuwei
 * @version 1.0.1
 * @date    2024-06-18
 * 
 * @copyright Copyright (c) 2023 JBD-Energy Storage Technology Co. LTD
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version   <th>Author   <th>Description
 * <tr><td>2024-06-18 <td>1.0.1     <td>Liuwei   <td>首次创建
 * </table>
 */

/* includes ------------------------------------------------------------------*/
#include "pc_pace.h"
#include "yd1363_app.h"
#include "yd1363_data.h"
#include "cfg_prj.h"
#include "var_mng.h"
#include "param_mng.h"
#include "parallel.h"
#include "mcu_type.h"
#include "boot_param.h"
#include "If_rtc.h"
#include <string.h>
#include "If_do.h"
#include "soc_calc.h"
#include "soh_calc.h"
#include "parallel_pace.h"
/* macro/define --------------------------------------------------------------*/
typedef struct 
{
	uint8_t cmd;
	uint8_t(*p_call_func)(ydt1363_data_type , uint8_t* , uint16_t*);
}yd1363_cmd_type;

#define YD1363_BMS_ADDR          (0x02)
#define PTL_VERSION              (0x25)
#define CID_CODE                 (0x46)
/* local functions -----------------------------------------------------------*/
static uint8_t pace_deal_00h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_42h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_44h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_90h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_99h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_9Ah_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_9Bh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_A4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_A6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_B1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_B2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len); //20240124删除
static uint8_t pace_deal_C1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_C2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_C3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_C4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D8h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_D9h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DAh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DBh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_B5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_B6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_A0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_A8h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_AEh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_AFh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DCh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DDh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_E7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_EBh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_ECh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DEh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_DFh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_BDh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint8_t pace_deal_A7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len);
static uint16_t pace_get_prp_state(void);
static uint16_t pace_get_alarm_state(void);
static uint8_t pace_get_sign(void);
static uint8_t pace_get_control(void);
static uint8_t pace_get_fault(void);
static uint8_t get_pace_can_ptl(void);
static uint8_t get_pace_rs485_ptl(void);
static uint8_t get_jbd_pace_can_ptl(uint8_t set_val);
static uint8_t get_jbd_pace_rs485_ptl(uint8_t set_val);
/* static variables ----------------------------------------------------------*/
static ydt1363_data_type recv_data = {0};
static yd1363_cmd_type pace_cmd_func[] = 
{
	{0x00 , pace_deal_00h_cmd },
    {0x42 , pace_deal_42h_cmd },
    {0x44 , pace_deal_44h_cmd },
    {0x90 , pace_deal_90h_cmd },
    {0x99 , pace_deal_99h_cmd },
    {0x9A , pace_deal_9Ah_cmd },
    {0x9B , pace_deal_9Bh_cmd },
	{0xA4 , pace_deal_A4h_cmd },
    {0xA6 , pace_deal_A6h_cmd },
    {0xB1 , pace_deal_B1h_cmd },
	{0xB2 , pace_deal_B2h_cmd },
    {0xC1 , pace_deal_C1h_cmd },
    {0xC2 , pace_deal_C2h_cmd },
	{0xC3 , pace_deal_C3h_cmd },
	{0xC4 , pace_deal_C4h_cmd },
	{0xD0 , pace_deal_D0h_cmd },
	{0xD1 , pace_deal_D1h_cmd },
	{0xD2 , pace_deal_D2h_cmd },
	{0xD3 , pace_deal_D3h_cmd },
	{0xD4 , pace_deal_D4h_cmd },
	{0xD5 , pace_deal_D5h_cmd },
	{0xD6 , pace_deal_D6h_cmd },
	{0xD7 , pace_deal_D7h_cmd },
	{0xD8 , pace_deal_D8h_cmd },
	{0xD9 , pace_deal_D9h_cmd },
	{0xDA , pace_deal_DAh_cmd },
	{0xDB , pace_deal_DBh_cmd },
	{0xE2 , pace_deal_E2h_cmd },
	{0xE3 , pace_deal_E3h_cmd },
	{0xE4 , pace_deal_E4h_cmd },
	{0xE5 , pace_deal_E5h_cmd },
	{0xEB , pace_deal_EBh_cmd },
	{0xEC , pace_deal_ECh_cmd },
	{0xB5 , pace_deal_B5h_cmd },
	{0xB6 , pace_deal_B6h_cmd },
	{0xA0 , pace_deal_A0h_cmd },
	{0xA7 , pace_deal_A7h_cmd },
	{0xA8 , pace_deal_A8h_cmd },
	{0xAE , pace_deal_AEh_cmd },
	{0xAF , pace_deal_AFh_cmd },
	{0xBD , pace_deal_BDh_cmd },
	{0xDC , pace_deal_DCh_cmd },
	{0xDD , pace_deal_DDh_cmd },
	{0xE0 , pace_deal_E0h_cmd },
	{0xE1 , pace_deal_E1h_cmd },
	{0xE6 , pace_deal_E6h_cmd },
	{0xE7 , pace_deal_E7h_cmd },
	{0xDE , pace_deal_DEh_cmd },
	{0xDF , pace_deal_DFh_cmd },
};

#define PACE_CMD_NUM         (sizeof(pace_cmd_func)/sizeof(yd1363_cmd_type))
    
extern master_data_type master_data_reg;
/* global variables ----------------------------------------------------------*/

/** ------------------------------------------------------------------------- *
  *                             Global function
 ** ------------------------------------------------------------------------- */
uint8_t pc_pace_analysis(uint8_t *rx_buf , uint16_t rx_len ,uint8_t *tx_buf , uint16_t *tx_len)
{
    uint8_t i = 0;
    uint8_t flag = FALSE;
	if(TRUE == ydt1363_com_analysis(rx_buf , rx_len ,&recv_data))
	{
        if((recv_data.cid1 == CID_CODE) && (recv_data.ver == PTL_VERSION))
        {
            for( i = 0;i < PACE_CMD_NUM; ++ i)
            {
                if(pace_cmd_func[i].cmd == recv_data.cid2)
                {
                    if(TRUE == pace_cmd_func[i].p_call_func(recv_data , tx_buf , tx_len))
                       flag = TRUE; 
                    
                    break;
                }
            }
            return flag;
        }
        else
        {
            return FALSE;
        }
	}
	else 
		return FALSE;
}

/** ------------------------------------------------------------------------- *
  *                              Local function
 ** ------------------------------------------------------------------------- */
static uint8_t pace_deal_00h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
    uint16_t i = 0;
    uint16_t temp_val = 0;
	uint16_t data_len = 0;
	uint8_t ptl_type[] = "HS-PACE-232-BP-V2.0";
	uint8_t size = 0;
    uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION    , &tx_buf[tx_idx]);
    tx_idx += 2;	
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    /* 数据内容 */ 
	size = sizeof(ptl_type);
    for( i = 0;i < size - 1; ++ i)
	{
		byte_to_ascii(ptl_type[i] , &tx_buf[tx_idx]);
		tx_idx += 2;
	}
	
	for(;i < 30 ; ++ i)
	{
		byte_to_ascii(0x20 , &tx_buf[tx_idx]);
		tx_idx += 2;
	}
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_42h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
    uint16_t i = 0;
    uint16_t temp_val = 0;
	uint16_t data_len = 0;
	uint8_t cell_num = 0;
    uint8_t addr_val = 0;
	uint8_t soh = 0;
	
	if(recv_data.addr == 0xFF)
		addr_val = 2;
	else 
		addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
	/* INFO */
    /* 数据内容 */ 
    byte_to_ascii(1, &tx_buf[tx_idx]);
    tx_idx += 2;
    // PACK N 
	cell_num = param_get_data(PAR_ID_CB_CELL_NUM);
	if(cell_num >= CELL_MAX_NUM)
		cell_num = CELL_MAX_NUM;
	byte_to_ascii(cell_num, &tx_buf[tx_idx]);
	tx_idx += 2;
    for(i = 0;i < cell_num; ++ i)
    {
		half_to_ascii(var_get_data(VAR_ID_CELL_VOLT01 + i) , &tx_buf[tx_idx]);
        tx_idx += 4;
    }
	byte_to_ascii(CFG_TEMP_NUM + 2, &tx_buf[tx_idx]);
	tx_idx += 2;
    for(i = 0;i < CFG_TEMP_NUM; ++ i)
    {
		half_to_ascii(var_get_data(VAR_ID_CELL_TEMP01 + i) + 2230 , &tx_buf[tx_idx]);
        tx_idx += 4;
    }
	half_to_ascii(var_get_data(VAR_ID_MOS_TEMP) + 2230 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(var_get_data(VAR_ID_ENV_TEMP) + 2230 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(var_get_data(VAR_ID_BUS_CURR) - 30000 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(var_get_data(VAR_ID_BATT_VOLT) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(var_get_data(VAR_ID_DISP_RCAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	
#ifdef USE_OLD_PTL
	byte_to_ascii(3, &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_FULL_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_CYCLE) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
#else
	byte_to_ascii(4, &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_FULL_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_CYCLE) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(var_get_data(VAR_ID_DISP_SOC)*0.01, &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP) , &tx_buf[tx_idx]);
    tx_idx += 4;
	soh = param_get_data(PAR_ID_SOH);
	if(soh > 100)
		soh= 100;
	byte_to_ascii(soh , &tx_buf[tx_idx]);
    tx_idx += 2;
//	half_to_ascii(var_get_data(VAR_ID_BATT_VOLT) * 10 , &tx_buf[tx_idx]);
//    tx_idx += 4;
//	half_to_ascii(var_get_data(VAR_ID_BUS_CURR) - 30000 , &tx_buf[tx_idx]);
//    tx_idx += 4;
#endif
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_44h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
    uint16_t i = 0;
    uint16_t temp_val = 0;
	uint16_t data_len = 0;
	uint8_t cell_num = 0;
	uint8_t addr_val = 0;
	uint8_t salve_paralla_num = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    if(PARALLEL_MASTER_ADDR == var_get_data(VAR_ID_SELF_ADDR))	
		salve_paralla_num = master_data_reg.parallel_num;
	else
		salve_paralla_num = 1;
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
	byte_to_ascii(salve_paralla_num , &tx_buf[tx_idx]);
    tx_idx += 2;
	
	cell_num = param_get_data(PAR_ID_CB_CELL_NUM);
	if(cell_num >= CELL_MAX_NUM)
		cell_num = CELL_MAX_NUM; 
	
	byte_to_ascii(cell_num , &tx_buf[tx_idx]);
    tx_idx += 2;
	for( i = 0;i < cell_num; ++ i)
	{
		byte_to_ascii(0 , &tx_buf[tx_idx]);
        tx_idx += 2;
	}
	byte_to_ascii(CFG_TEMP_NUM + 2 , &tx_buf[tx_idx]);
	tx_idx += 2;
	for( i = 0;i < CFG_TEMP_NUM + 2; ++ i)
	{
		byte_to_ascii(0 , &tx_buf[tx_idx]);
        tx_idx += 2;
	}
	byte_to_ascii(0 , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(0 , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(0 , &tx_buf[tx_idx]);
	tx_idx += 2;
	
	byte_to_ascii(pace_get_prp_state() & 0xff , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii((pace_get_prp_state() >> 8) & 0xff , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(pace_get_sign() , &tx_buf[tx_idx]);
	tx_idx += 2;
	
	byte_to_ascii(pace_get_control() , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(pace_get_fault() , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(var_get_data(VAR_ID_BLC_NOW_IDX) & 0xff , &tx_buf[tx_idx]);
	tx_idx += 2;
	
	byte_to_ascii(var_get_data(VAR_ID_BLC_NOW_IDX) >> 8 , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(pace_get_alarm_state() & 0xff , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(pace_get_alarm_state() >> 8 , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(0 , &tx_buf[tx_idx]);
	tx_idx += 2;
    /* 数据内容 */ 
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_90h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);

    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(master_data_reg.parallel_num , &tx_buf[tx_idx]);
    tx_idx += 2;

    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_99h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
    
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(0x20 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_9Ah_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
    uint8_t dev_name[20] = DEV_NAME;
    uint8_t pack_name[30] = PAR_DFT_PACK_MFT;
    uint8_t i = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */	
		
    for( i = 0;i < 10; ++ i)
	{
		byte_to_ascii(dev_name[i] , &tx_buf[tx_idx]);
		tx_idx += 2;
	}

    half_to_ascii(0 , &tx_buf[tx_idx]);  //DR传0
    tx_idx += 4;

    for( i = 0;i < 20; ++ i)
	{
		byte_to_ascii(pack_name[i] , &tx_buf[tx_idx]);
		tx_idx += 2;
	}		
    
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_9Bh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
    uint8_t i = 0;
    uint16_t pack_ol_state = 0;
    uint8_t j = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
    
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    for( i =0 ;i < 10; ++ i)
    {
        tx_buf[tx_idx ++ ] = 0x30;
    }
    for( i =0 ;i < 20; ++ i)
    {
        tx_buf[tx_idx ++ ] = 0x30;
    }
    half_to_ascii(SOFT_VER_MAIN, &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(SOFT_VER_RELEASE, &tx_buf[tx_idx]);
    tx_idx += 2;
    half_to_ascii(var_get_data(VAR_ID_TP_POL_NUM), &tx_buf[tx_idx]);
    tx_idx += 2;
    
    pack_ol_state = var_get_data(VAR_ID_TP_PACK_OL_ST);
    for( i = 0; i < CFG_PARALLEL_NUM; ++ i)
    {
        if((1 << i) & pack_ol_state)
        {
            for( j =0 ;j < 16; ++ j)
            {
                tx_buf[tx_idx ++ ] = 0x30;
            }
        }
    }
    
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
    tx_idx += 4;
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_B1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	rtc_data_type rtc_time = {0};
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	
	If_rtc_read_time(&rtc_time);
	byte_to_ascii(rtc_time.year - 2000 , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(rtc_time.month , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(rtc_time.day , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(rtc_time.hour , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(rtc_time.min , &tx_buf[tx_idx]);
	tx_idx += 2;
	byte_to_ascii(rtc_time.sec , &tx_buf[tx_idx]);
	tx_idx += 2;
	/* INFO */
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_B2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	rtc_data_type rtc_time = {0};
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.addr , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	rtc_time.year = recv_data.data_buf[0] + 2000;
	rtc_time.month = recv_data.data_buf[1];
	rtc_time.day = recv_data.data_buf[2];
	rtc_time.hour = recv_data.data_buf[3];
	rtc_time.min = recv_data.data_buf[4];
	rtc_time.sec = recv_data.data_buf[5];
	If_rtc_set_time(rtc_time);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_C1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t pack_name[] = DEV_NAME;//"P16S100A-31331-1.03";
	uint8_t prj_name[] = PRJ_NAME;
	uint8_t i = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	byte_to_ascii('P' , &tx_buf[tx_idx]);
    tx_idx += 2;
    data_len = strlen((char *)pack_name) - 1;
	for( i = 0;i <= data_len; ++ i)
	{
		byte_to_ascii(pack_name[i] , &tx_buf[tx_idx]);
		tx_idx += 2;
	}
	byte_to_ascii('-' , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;	
    data_len = strlen((char *)prj_name)-1;	
	for( i = 0;i < data_len; ++ i)	
	{
		byte_to_ascii(prj_name[i] , &tx_buf[tx_idx]);
		tx_idx += 2;	
	}
	byte_to_ascii('-' , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;	
	if(SOFT_VER_MAIN < 10)
	{
		byte_to_ascii(SOFT_VER_MAIN + 0x30 , &tx_buf[tx_idx]);
		++ i;
	}
	else
	{
		byte_to_ascii(SOFT_VER_MAIN /10 + 0x30 , &tx_buf[tx_idx]);
		++ i;
		tx_idx += 2;
		byte_to_ascii((SOFT_VER_MAIN % 10) + 0x30 , &tx_buf[tx_idx]);
		++ i;
	}
    tx_idx += 2;
	byte_to_ascii('.' , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;
	byte_to_ascii((SOFT_VER_RELEASE / 10) + 0x30 , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;
	byte_to_ascii((SOFT_VER_RELEASE % 10) + 0x30 , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;	

	byte_to_ascii(0x20 , &tx_buf[tx_idx]);
	++ i;
	tx_idx += 2;

	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_C2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
    uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
    uint16_t i = 0;	
	uint8_t byte = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    for( i = 0;i < 10; ++ i)
	{
		temp_val = param_get_data(PAR_ID_BMS_CODE + i);
		byte = temp_val & 0xff;
		if(temp_val != 0x00)
		{
			byte_to_ascii(byte  , &tx_buf[tx_idx]);
		}
		else
			byte_to_ascii(0x20  , &tx_buf[tx_idx]);
		tx_idx += 2;
		byte = temp_val >> 8;
		if(byte != 0x00)
		{
			byte_to_ascii(byte  , &tx_buf[tx_idx]);
		}
		else
			byte_to_ascii(0x20  , &tx_buf[tx_idx]);
		
		tx_idx += 2;
	}
	
	for( i = 0;i < 10; ++ i)
	{
		temp_val = param_get_data(PAR_ID_SN_CODE + i);
		byte = temp_val & 0xff;
		if(byte != 0x00)
		{
			byte_to_ascii(byte  , &tx_buf[tx_idx]);
		}
		else
			byte_to_ascii(0x20  , &tx_buf[tx_idx]);
		tx_idx += 2;
		byte = temp_val >> 8;
		if(byte != 0x00)
		{
			byte_to_ascii(byte  , &tx_buf[tx_idx]);
		}
		else
			byte_to_ascii(0x20  , &tx_buf[tx_idx]);
		
		tx_idx += 2;
	}
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_COV_ALM_VAL , set_val);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_COV_PRP_VAL , set_val);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_COV_PRP_RCV , set_val);
	set_val = recv_data.data_buf[7] * 100;
	param_set_data(PAR_ID_COV_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_COV_ALM_VAL) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_COV_PRP_VAL) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_COV_PRP_RCV) , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_COV_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_BOV_ALM_VAL , set_val * 0.1);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_BOV_PRP_VAL , set_val * 0.1);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_BOV_PRP_RCV , set_val * 0.1);
	set_val = recv_data.data_buf[7] * 100;
	param_set_data(PAR_ID_BOV_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_BOV_ALM_VAL) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_BOV_PRP_VAL) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_BOV_PRP_RCV) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_BOV_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_CUV_ALM_VAL , set_val);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_CUV_PRP_VAL , set_val);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_CUV_PRP_RCV , set_val);
	set_val = recv_data.data_buf[7] * 100;
	param_set_data(PAR_ID_CUV_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_CUV_ALM_VAL) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_CUV_PRP_VAL) , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_CUV_PRP_RCV) , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_CUV_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_BUV_ALM_VAL , set_val * 0.1);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_BUV_PRP_VAL , set_val * 0.1);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_BUV_PRP_RCV , set_val * 0.1);
	set_val = recv_data.data_buf[7] * 100;
	param_set_data(PAR_ID_BUV_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_BUV_ALM_VAL) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_BUV_PRP_VAL) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_BUV_PRP_RCV) * 10 , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_BUV_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D8h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_OCC_ALM_VAL , set_val * 10);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_OCC_PRP_VAL , set_val * 10);
	set_val = recv_data.data_buf[5] * 100;
	param_set_data(PAR_ID_OCC_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_D9h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(param_get_data(PAR_ID_OCC_ALM_VAL) * 0.1 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OCC_PRP_VAL) * 0.1 , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_OCC_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DAh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	int16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_OCD1_ALM_VAL , set_val * 10);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_OCD1_PRP_VAL , set_val * 10);
	set_val = recv_data.data_buf[5] * 100;
	param_set_data(PAR_ID_OCD1_PRP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DBh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(-param_get_data(PAR_ID_OCD1_ALM_VAL) * 0.1 , &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(-param_get_data(PAR_ID_OCD1_PRP_VAL) * 0.1 , &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_OCD1_PRP_DLY) * 0.01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E2h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = recv_data.data_buf[0] + recv_data.data_buf[1];
	param_set_data(PAR_ID_OCD2_PRP_VAL , set_val * 10);
	set_val = recv_data.data_buf[2];
	param_set_data(PAR_ID_OCD2_PRP_DLY , set_val * 25);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
	byte_to_ascii(param_get_data(PAR_ID_OCD2_PRP_VAL) * 0.1 , &tx_buf[tx_idx]);
    tx_idx += 2;
	byte_to_ascii(param_get_data(PAR_ID_OCD2_PRP_DLY) / 25 , &tx_buf[tx_idx]);
    tx_idx += 2;
	byte_to_ascii(0 , &tx_buf[tx_idx]);
    tx_idx += 2;
	half_to_ascii(0x9604 , &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x0C , &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_B5h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[0] << 8) + recv_data.data_buf[1];
	param_set_data(PAR_ID_BLC_VOLT , set_val);
	set_val = (recv_data.data_buf[2] << 8) + recv_data.data_buf[3];
	param_set_data(PAR_ID_BLC_VDIFF , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}
// 均衡参数
static uint8_t pace_deal_B6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    half_to_ascii(param_get_data(PAR_ID_BLC_VOLT), &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_BLC_VDIFF), &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_A0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    half_to_ascii(param_get_data(PAR_ID_IDE_SLP_VOLT), &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_IDE_SLP_DLY), &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_A6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    half_to_ascii(var_get_data(VAR_ID_DISP_RCAP), &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_STD_CAP), &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_FULL_CAP), &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_A4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	param_valid_check(PARAM_RESET);
    param_save_all();
			
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_A7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint16_t set_rcap = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_rcap = (recv_data.data_buf[0] << 8) + recv_data.data_buf[1];
	
	set_val = (recv_data.data_buf[2] << 8) + recv_data.data_buf[3];
	param_set_data(PAR_ID_STD_CAP , set_val);
	set_val = (recv_data.data_buf[4] << 8) + recv_data.data_buf[5];
	soh_set_full_cap(set_val);
	
	if (set_rcap <= param_get_data(PAR_ID_FULL_CAP))
	{
		set_rcap = 10000 * set_rcap /param_get_data(PAR_ID_FULL_CAP);
		soc_calc_set_soc(set_rcap);
	}
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_A8h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[0] << 8) + recv_data.data_buf[1];
	param_set_data(PAR_ID_IDE_SLP_VOLT , set_val);
	set_val = (recv_data.data_buf[2] << 8) + recv_data.data_buf[3];
	param_set_data(PAR_ID_IDE_SLP_DLY , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_AEh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[0] << 8) + recv_data.data_buf[1];
	param_set_data(PAR_ID_FULL_CHG_VOLT , set_val * 0.1);
	set_val = (recv_data.data_buf[2] << 8) + recv_data.data_buf[3];
	param_set_data(PAR_ID_FULL_CHG_CURR , set_val);
	set_val = recv_data.data_buf[4];
	param_set_data(PAR_ID_SOCL_ALM_VAL , set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_C3h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t i = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	data_len = (recv_data.len & 0xfff) / 4;
	for( i = 0;i < data_len; i ++)
	{
		set_val = recv_data.data_buf[i * 2] + (recv_data.data_buf[i * 2 + 1] << 8);
		param_set_data(PAR_ID_BMS_CODE + i, set_val);
	}
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_C4h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t i = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	data_len = (recv_data.len & 0xfff) / 4;
	for( i = 0;i < data_len; i ++ )
	{
		set_val = recv_data.data_buf[i * 2] + (recv_data.data_buf[i * 2 + 1] << 8);
		param_set_data(PAR_ID_SN_CODE + i, set_val);
	}
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_AFh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    half_to_ascii(param_get_data(PAR_ID_FULL_CHG_VOLT) * 10, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_FULL_CHG_CURR), &tx_buf[tx_idx]);
    tx_idx += 4;
	byte_to_ascii(param_get_data(PAR_ID_SOCL_ALM_VAL), &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_BDh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[0] << 8) + recv_data.data_buf[1];
	param_set_data(PAR_ID_CYCLE , set_val);
	soc_set_cycle(set_val);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DCh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_OTC_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_OTC_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_OTC_PRP_RCV , set_val - 2230);
	set_val = (recv_data.data_buf[7] << 8) + recv_data.data_buf[8];
	param_set_data(PAR_ID_OTD_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[9] << 8) + recv_data.data_buf[10];
	param_set_data(PAR_ID_OTD_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[11] << 8) + recv_data.data_buf[12];
	param_set_data(PAR_ID_OTD_PRP_RCV , set_val - 2230);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DDh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
    half_to_ascii(param_get_data(PAR_ID_OTC_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTC_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTC_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTD_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTD_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTD_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E0h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_OTM_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_OTM_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_OTM_PRP_RCV , set_val - 2230);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E1h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
    half_to_ascii(param_get_data(PAR_ID_OTM_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTM_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTM_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E6h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_UTE_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_UTE_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_UTE_PRP_RCV , set_val - 2230);
	set_val = (recv_data.data_buf[7] << 8) + recv_data.data_buf[8];
	param_set_data(PAR_ID_OTE_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[9] << 8) + recv_data.data_buf[10];
	param_set_data(PAR_ID_OTE_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[11] << 8) + recv_data.data_buf[12];
	param_set_data(PAR_ID_OTE_PRP_RCV , set_val - 2230);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_E7h_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
	
	half_to_ascii(param_get_data(PAR_ID_UTE_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTE_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTE_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
    half_to_ascii(param_get_data(PAR_ID_OTE_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTE_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_OTE_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DEh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = (recv_data.data_buf[1] << 8) + recv_data.data_buf[2];
	param_set_data(PAR_ID_UTC_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[3] << 8) + recv_data.data_buf[4];
	param_set_data(PAR_ID_UTC_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[5] << 8) + recv_data.data_buf[6];
	param_set_data(PAR_ID_UTC_PRP_RCV , set_val - 2230);
	set_val = (recv_data.data_buf[7] << 8) + recv_data.data_buf[8];
	param_set_data(PAR_ID_UTD_ALM_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[9] << 8) + recv_data.data_buf[10];
	param_set_data(PAR_ID_UTD_PRP_VAL , set_val - 2230);
	set_val = (recv_data.data_buf[11] << 8) + recv_data.data_buf[12];
	param_set_data(PAR_ID_UTD_PRP_RCV , set_val - 2230);
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_DFh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
    half_to_ascii(param_get_data(PAR_ID_UTC_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTC_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTC_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTD_ALM_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTD_PRP_VAL) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	half_to_ascii(param_get_data(PAR_ID_UTD_PRP_RCV) + 2230, &tx_buf[tx_idx]);
    tx_idx += 4;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_EBh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	int16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
		addr_val = 2;
	else 
		addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(var_get_data(VAR_ID_SELF_ADDR) , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
    byte_to_ascii(0x01 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(get_pace_can_ptl(), &tx_buf[tx_idx]);
    tx_idx += 2;
	byte_to_ascii(get_pace_rs485_ptl(), &tx_buf[tx_idx]);
    tx_idx += 2;
	byte_to_ascii(1, &tx_buf[tx_idx]);
    tx_idx += 2;
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint8_t pace_deal_ECh_cmd(ydt1363_data_type recv_data, uint8_t* tx_buf, uint16_t* tx_len)
{
	uint16_t tx_idx = 0;
	uint16_t data_len = 0;
    uint16_t temp_val = 0;
	uint16_t set_val = 0;
	uint8_t addr_val = 0;
	
	if(recv_data.addr == 0xFF)
	addr_val = 2;
	else 
    addr_val = var_get_data(VAR_ID_SELF_ADDR);
	
    tx_buf[tx_idx ++ ] = SOI;
    byte_to_ascii(PTL_VERSION , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(addr_val , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(recv_data.cid1 , &tx_buf[tx_idx]);
    tx_idx += 2;
    byte_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 2;
    /* 长度 */
    half_to_ascii(0x00 , &tx_buf[tx_idx]);
    tx_idx += 4;
	/* INFO */
	set_val = get_jbd_pace_can_ptl(recv_data.data_buf[0]);
	param_set_data(PAR_ID_PCS_CAN_TYPE , set_val);
	set_val = get_jbd_pace_rs485_ptl(recv_data.data_buf[1]);
	param_set_data(PAR_ID_PCS_RS485_TYPE , set_val);
	set_val = recv_data.data_buf[2];
	
    data_len = yd1363_calc_len(tx_idx - 13);
	half_to_ascii(data_len , &tx_buf[9]);
	temp_val = yd1636_calc_crc(&tx_buf[1] , tx_idx - 1);
	half_to_ascii(temp_val , &tx_buf[tx_idx]);
    tx_idx += 4;
	tx_buf[tx_idx ++ ] = EOI;
    
    *tx_len = tx_idx;
    return TRUE;
}

static uint16_t pace_get_prp_state(void)
{
	uint16_t prp_state = 0;
	
	if(TRUE == diag_get_prp(PRP_ID_SC))
		prp_state |= (1 << 6);
	if(TRUE == diag_get_prp(PRP_ID_OCD))
		prp_state |= (1 << 5);
	if((TRUE == diag_get_prp(PRP_ID_OCC)) || (TRUE == diag_get_prp(PRP_ID_OCC2)))
		prp_state |= (1 << 4);
	if(TRUE == diag_get_prp(PRP_ID_BUV))
		prp_state |= (1 << 3);
	if(TRUE == diag_get_prp(PRP_ID_BOV))
		prp_state |= (1 << 2);
	if(TRUE == diag_get_prp(PRP_ID_CUV))
		prp_state |= (1 << 1);
	if(TRUE == diag_get_prp(PRP_ID_COV))
		prp_state |= (1 << 0);
	
	if(TRUE == diag_get_prp(PRP_ID_FULL_CHG))
		prp_state |= (1 << 15);
	if(TRUE == diag_get_prp(PRP_ID_UTE))
		prp_state |= (1 << 14);
	if(TRUE == diag_get_prp(PRP_ID_OTE))
		prp_state |= (1 << 13);
	if(TRUE == diag_get_prp(PRP_ID_OTM))
		prp_state |= (1 << 12);
	if(TRUE == diag_get_prp(PRP_ID_UTD))
		prp_state |= (1 << 11);
	if(TRUE == diag_get_prp(PRP_ID_UTC))
		prp_state |= (1 << 10);
	if(TRUE == diag_get_prp(PRP_ID_OTD))
		prp_state |= (1 << 9);
	if(TRUE == diag_get_prp(PRP_ID_OTC))
		prp_state |= (1 << 8);
	
	return prp_state;
}

static uint16_t pace_get_alarm_state(void)
{
	uint16_t alm_msg = 0;
	
	if(TRUE == diag_get_alarm(ALM_ID_OCD))
		alm_msg |= (1 << 5);
	if(TRUE == diag_get_alarm(ALM_ID_OCC))
		alm_msg |= (1 << 4);
	if(TRUE == diag_get_alarm(ALM_ID_BUV))
		alm_msg |= (1 << 3);
	if(TRUE == diag_get_alarm(ALM_ID_BOV))
		alm_msg |= (1 << 2);
	if(TRUE == diag_get_alarm(ALM_ID_CUV))
		alm_msg |= (1 << 1);
	if(TRUE == diag_get_alarm(ALM_ID_COV))
		alm_msg |= (1 << 0);
	
	if(TRUE == diag_get_alarm(ALM_ID_SOCL))
		alm_msg |= (1 << 15);
	if(TRUE == diag_get_alarm(ALM_ID_OTM))
		alm_msg |= (1 << 14);
	if(TRUE == diag_get_alarm(ALM_ID_UTE))
		alm_msg |= (1 << 13);
	if(TRUE == diag_get_alarm(ALM_ID_OTE))
		alm_msg |= (1 << 12);
	if(TRUE == diag_get_alarm(ALM_ID_UTD))
		alm_msg |= (1 << 11);
	if(TRUE == diag_get_alarm(ALM_ID_UTC))
		alm_msg |= (1 << 10);
	if(TRUE == diag_get_alarm(ALM_ID_OTD))
		alm_msg |= (1 << 9);
	if(TRUE == diag_get_alarm(ALM_ID_OTC))
		alm_msg |= (1 << 8);
	
	return alm_msg;
}

static uint8_t pace_get_sign(void)
{
	uint8_t sign = 0;
	uint8_t mos_state = 0;
	
	if(If_do_get_out_state(DO_HOT_CTRL) == DO_OUT_ON)
		sign |= (1 << 7);
	mos_state = var_get_data(VAR_ID_MOS_STATE);
	if(mos_state & (1 << VAR_MOS_ST_DSG))
		sign |= (1 << 2);
	if(mos_state & (1 << VAR_MOS_ST_CHG))
		sign |= (1 << 1);
    if(If_do_get_out_state(DO_LIMIT_10A) == DO_OUT_ON)
		sign |= (1 << 0);
	
	return sign;
}

static uint8_t pace_get_control(void)
{
	uint8_t ctrl_state = 0;
	
	return ctrl_state;
}

static uint8_t pace_get_fault(void)
{
	uint8_t fault_state = 0;
	
	if(diag_get_prp(PRP_ID_FT_AFE))
		fault_state |= (1 << 5);
	if(diag_get_prp(PRP_ID_COL))
		fault_state |= (1 << 4);
	if(diag_get_prp(PRP_ID_TOL))
		fault_state |= (1 << 2);
	if(diag_get_prp(PRP_ID_FT_DMOS))
		fault_state |= (1 << 1);
	if(diag_get_prp(PRP_ID_FT_CMOS))
		fault_state |= (1 << 0);
	
	return fault_state;
}

static uint8_t get_pace_can_ptl(void)
{
	uint8_t can_type = 0;
	uint8_t can_param = 0;
	
	can_param = param_get_data(PAR_ID_PCS_CAN_TYPE);
	
	if(can_param == PCS_CAN_PYLON)
		can_type = 1;
	else if(can_param == PCS_CAN_GROWATT)
		can_type = 2;
	else if(can_param == PCS_CAN_VICTRON)
		can_type = 3;
	else if(can_param == PCS_CAN_SMA)
		can_type = 7;
	else if(can_param == PCS_CAN_MUST)
		can_type = 11;
	else if(can_param == PCS_CAN_SOFAR)
		can_type = 10;
	else if(can_param == PCS_CAN_GOODWE)
		can_type = 8;
	else if(can_param == PCS_CAN_LXP)
		can_type = 5;
	else if(can_param == PCS_CAN_INVENT)
		can_type = 20;
	else if(can_param == PCS_CAN_SOROUPS)
		can_type = 6;
	else if(can_param == PCS_CAN_SRNE)
		can_type = 14;
	else
		can_type = 1;
	
	return can_type;
}
static uint8_t get_pace_rs485_ptl(void)
{
	uint8_t rs485_type = 0;
	uint8_t rs485_param = 0;
	
	rs485_param = param_get_data(PAR_ID_PCS_RS485_TYPE);
	
	if(rs485_param == PCS_RS485_PYLON)
		rs485_type = 1;
	else if(rs485_param == PCS_RS485_GROWATT)
		rs485_type = 2;
	else if(rs485_param == PCS_RS485_VOLTRONIC)
		rs485_type = 3;
	else if(rs485_param == PCS_RS485_SRNE)
		rs485_type = 13;
	else
		rs485_type = 1;
	
	return rs485_type;
}

static uint8_t get_jbd_pace_can_ptl(uint8_t set_val)
{
	uint8_t can_param = 0;
	
	if(set_val == 1)
		can_param = PCS_CAN_PYLON;
	else if(set_val == 2)
		can_param = PCS_CAN_GROWATT;
	else if(set_val == 3)
		can_param = PCS_CAN_VICTRON;
	else if(set_val == 7)
		can_param = PCS_CAN_SMA;
	else if(set_val == 11)
		can_param = PCS_CAN_MUST;
	else if(set_val == 10)
		can_param = PCS_CAN_SOFAR;
	else if(set_val == 8)
		can_param = PCS_CAN_GOODWE;
	else if(set_val == 5)
		can_param = PCS_CAN_LXP;
	else if(set_val == 20)
		can_param = PCS_CAN_INVENT;
	else if(set_val == 6)
		can_param = PCS_CAN_SOROUPS;
	else if(set_val == 14)
		can_param = PCS_CAN_SRNE;
	else
		can_param = 0;
	
	return can_param;
}

static uint8_t get_jbd_pace_rs485_ptl(uint8_t set_val)
{
	uint8_t rs485_param = 0;
	
	rs485_param = param_get_data(PAR_ID_PCS_RS485_TYPE);
	
	if(set_val == 1)
		rs485_param = PCS_RS485_PYLON;
	else if(rs485_param == 2)
		rs485_param = PCS_RS485_GROWATT;
	else if(rs485_param == 3)
		rs485_param = PCS_RS485_VOLTRONIC;
	else if(rs485_param == 13)
		rs485_param = PCS_RS485_SRNE;
	else
		rs485_param = 1;
	
	return rs485_param;
}


/********** Copyright (c) 2023 JBD-Energy Storage Technology Co. LTD *********/
